Moderating application communications according to network conditions

ABSTRACT

Systems, methods and computer-readable media are presented for moderating the network connectivity of an application according to network connectivity quality. A monitoring component and/or process receives information regarding network requests from the computing device, filters the requests according to an application, and for each of the filtered network requests generates a network request tuple from the network request and stores the information in a communication queue. A moderating component and/or process receives a network request of the application, evaluates the network connectivity quality for the application according to the information in the communication queue, and moderates the network request activity of the application commensurate with the network connectivity quality.

BACKGROUND

When a computer user loads an app or application onto a computingdevice, there is an expectation of responsiveness: that theapp/application will respond quickly in performing its variousfunctions. However, when the app or application fails to be responsive,it is not necessarily the fault of app but, rather, a product ofconnectivity issues, especially for those apps or applications that relyon communicating with external (to the computing device) services,resources, computers, etc.

Further, connectivity issues aren't necessarily caused simply by poor orweak connections to a network. Indeed, even when a quality, highbandwidth connection to a network is established, connectivity issuesmay arise because a particular service or resource is congested or is,itself, experiencing connectivity issues.

SUMMARY

The following Summary is provided to introduce a selection of conceptsin a simplified form that are further described below in the DetailedDescription. The Summary is not intended to identify key features oressential features of the claimed subject matter, nor is it intended tobe used to limit the scope of the claimed subject matter.

Systems, methods and computer-readable media are presented formoderating the network connectivity of an application according tonetwork connectivity quality. A monitoring component and/or processreceives information regarding network requests from the computingdevice, filters the requests according to an application, and for eachof the filtered network requests generates a network request tuple fromthe network request and stores the information in a communication queue.A moderating component and/or process receives a network request of theapplication, evaluates the network connectivity quality for theapplication according to the information in the communication queue, andmoderates the network request activity of the application commensuratewith the network connectivity quality.

According to various aspects of the disclosed subject matter, a methodfor moderating the network connectivity of an application with regard tonetwork connectivity quality is presented. The method includesmaintaining a communication queue of most recent network request data ofa moderated application on a computing device. Additionally, a currentnetwork connectivity quality is determined for the moderated applicationaccording to the network request data of the moderated applicationmaintained in the communication queue. Further, a moderation instructionis issued to the moderated application corresponding to the determinedcurrent network connectivity quality for the moderated application. Themoderation instruction corresponds to a directive to the moderatedapplication to alter network request activity from a first level offunctionality to a second level of functionality.

According to further aspects of the disclosed subject matter, acomputer-readable medium bearing computer-executable instructions. Theinstructions, when executed by a processor of a computing device, carryout a method for moderating the network connectivity of a moderatedapplication with regard to network connectivity quality. The methodcomprises maintaining a communication queue of most recent networkrequest data of the moderated application on a computing device. Themost recent network request data in the communication queue includesnetwork request tuples, where each network request tuple corresponds toa recent network request of the moderated application. Additionally, acurrent network connectivity quality is determined for the moderatedapplication according to the communication queue and a moderationinstruction is issued to the moderated application, the moderationinstruction corresponding to the determined current network connectivityquality for the moderated application. More particularly, the moderationinstruction corresponds to a directive to the moderated application toalter network request activity from a first level of functionality to asecond level of functionality.

According to still further aspects of the disclosed subject matter, acomputing device configured to moderate the network connectivity of amoderated application with regard to network connectivity quality ispresented. The computing device comprising a processor and a memory,wherein the processor executes instructions stored in the memory. Inexecution, the processor causes the computing device to maintain acommunication queue of most recent network request data of the moderatedapplication. Further, a current network connectivity quality isdetermined for the moderated application according to the most recentnetwork request data of the moderated application in the communicationqueue. Based on the determined current network connectivity quality, amoderation instruction is issued to the moderated application. Themoderation instruction corresponds to a directive to the moderatedapplication to alter its network request activity from a first level offunctionality to a second level of functionality.

BRIEF DESCRIPTION OF THE DRAWINGS

The foregoing aspects and many of the attendant advantages of thedisclosed subject matter will become more readily appreciated as theyare better understood by reference to the following description whentaken in conjunction with the following drawings, wherein:

FIG. 1 is a pictorial diagram illustrating an exemplary networkenvironment suitable for implementing aspects of the disclosed subjectmatter;

FIG. 2 is a block diagram illustrating an exemplary inter-operation ofcomponents configured to moderate network communications activity of anapp, according to aspects of the disclosed subject matter;

FIG. 3 is a flow diagram illustrating an exemplary routine formonitoring current network conditions in accordance with aspects of thedisclosed subject matter;

FIG. 4 is a flow diagram illustrating an exemplary routine formoderating network communications according to current networkconditions according to aspects of the disclosed subject matter;

FIG. 5 is a flow diagram illustrating an exemplary routine for resettinga communication queue upon detection of a change in the network channelby which the computing device communicates with external services,resources and devices on a network;

FIG. 6 is a flow diagram illustrating an exemplary routine 600 asimplemented by an application configured to moderation networkcommunication requests according to network quality;

FIG. 7 is a block diagram illustrating an exemplary computer readablemedium encoded with instructions for moderating network communicationsof an application according to current network conditions in accordancewith aspects of the disclosed subject matter;

FIG. 8 is block diagram illustrating an exemplary computing devicesuitably configured to moderate network communications of an applicationaccording to network conditions in in accordance with aspects of thedisclosed subject matter; and

FIG. 9 is a block diagram illustrating an alternative exemplarycomputing device suitably configured to moderate network communicationsof an application according to network conditions in in accordance withaspects of the disclosed subject matter.

DETAILED DESCRIPTION

For purposed of clarity, the use of the term “exemplary” in thisdocument should be interpreted as serving as an illustration or exampleof something, and it should not be interpreted as an ideal and/orleading illustration of that thing. Stylistically, when a word or termis followed by “(s)”, the meaning should be interpreted as indicatingthe singular or the plural form of the word or term, depending onwhether there is one instance of the term/item or whether there is oneor multiple instances of the term/item. For example, the term “user(s)”should be interpreted as one or more users.

For purposed of this document, the term “application” should beinterpreted as a computer program comprised of computer-executable codedesigned to perform a group of coordinated functions, tasks, oractivities for the benefit of the user of the computer or computingdevice. The term “app” should also be interpreted as a computer programcomprised of computer-executable code designed to perform a group ofcoordinated functions, tasks, or activities for the benefit of the userof the computer or computing device. Generally speaking, the distinctionbetween an app and an application lies in the complexity of designand/or size, where an app is typically smaller in size than anapplication and focused on a single function or a small set of relatedfunctionality. In contrast, an application is typically more robust,covering a broader spectrum of functionality which also implies greatersize. Due to their natures, apps are typically used on computing devicesof more limited processing abilities, whereas applications are typicallyused on computing devices that have more processing capabilities.Irrespective of the differences (or lack thereof) between an app and anapplication, aspects of the disclosed subject matter may be suitablyimplemented within either an app or application, or be suitablyimplemented on a computing device having significant processing andresource capacity or on computing devices having limited processingabilities. Accordingly, unless explicitly differentiated as beingapplied only to an app or only to an application, the terms app andapplication should be viewed as generally interchangeable for purposesof this disclosure.

In order to improve the apparent responsiveness of an app (orapplication), a moderation module is utilized to determine currentnetwork connectivity quality for the app and moderate the app'sconnectivity requests accordingly. According to aspects of the disclosedsubject matter, a suitably configured app (or application) providesfunctionality corresponding to one or more actions that may be taken bythe app to moderate (increase or decrease) its level of communicationactivity commensurate with the current network connectivity quality.

In particular, a communications queue is maintained for the app. Thecommunication queue includes communication information regarding themost recent communications of the app over the network. Thecommunication information includes, by way of illustration and notlimitation, the time to complete a network request (from the initiationof the request to receipt of the final communication packet), the amountof data sent and/or received with regard to a network request, and/orwhether or not the network request resulted in a failure (i.e., failedto complete). Further still and according to additional embodiments, thecommunication queue is a circular queue in which only the n most recentnetwork requests from the app are maintained (where n corresponds tosome predetermined number, such as, by way of illustration and notlimitation, 30 as in 30 network requests).

To facilitate and maintain the most recent communication information ofthe app in the communication queue, a network request monitor receivesnetwork requests of the computing device and filters the requestsaccording to those corresponding to the particular app. A storage moduletakes each of the filtered network requests (i.e., those that remainafter the filtering for the app) in chronological order, extracts thecommunication information from the network request that is to be storedin the communication queue, and enters the extracted communicationinformation for the network request into the communication queue,cycling through the communication queue in a circular manner such thatonly the communication information of the n most recent network requestsis maintained within the queue.

Additionally and according to various aspects of the disclosed subjectmatter, the entries in the communications queue correspond to a singlecommunication channel. Accordingly, when the computing device switchescommunications channels (e.g., switches from a 3G communications channel(e.g., 4G via CDMA) to a WiFi communication channel (e.g., 802.11x)),the communication queue is emptied and new communication information isentered as network requests from the app are detected. In this manner,the communication monitoring module can moderate network activityaccording to current communication channel conditions, not based onprevious conditions that may no longer be applicable.

As mentioned above, moderation module is utilized to determine currentnetwork connectivity quality for the app and moderate the app'sconnectivity requests accordingly. The determination of networkconnectivity quality is made according to internal heuristics,thresholds, and the communication information stored in thecommunications queue. By way of illustration and not limitation, theheuristics may include factoring in the number of failures, the averagethroughput of data including to and from communications, the number ofretries (typically expressed in packets) that must be made to complete acommunication, and the like. As further indicted above, based on adetermination of the network connectivity quality, a moderation modulemay initiate various actions to occur with an app or application suchthat the amount of network requests generated by the app/application ismoderated according to the network connectivity quality.

While this determination of communication quality may be binary, i.e.,quality sufficient for full-featured vs. reduced-featured operation, inmany instances the determination may produce a quality rating of morethan just two values. By way of illustration and not limitation, adetermination of communication quality may return one of three levels ofquality (corresponding to full-, middle-, reduced-featured operation),or according to a percentage value (i.e., a value between a highestquality value and a lowest quality value, e.g., 100 and 0, where zero(0) indicates the poorest/lowest quality value of communicationquality.) Of course, while the moderation module may be able to moderatecommunication activity of an app according to a variety of communicationquality values, of equal importance is the ability of the app to providefor different levels of operation. According to one embodiment, the appimplements or provides functionality for moderating communicationactivity according to the determined communication quality, e.g., binaryfunctionality (high/low), tertiary functionality (high/medium/low),percentage value, etc. Moderating network request activity may beimplemented through, by way of illustration and not limitation, reducednetwork request calls, requesting compressed, smaller and/or reducedquality images or data, suspending pre-fetch requests, aggregate networkrequests for few submissions, and the like. Further, supportive but notmandatorily, network requests may be disabled according to the networkconnectivity quality currently detected.

In implementing the actions to moderate network requests according tonetwork connectivity quality, a suitably configured app may implement acallback function that a moderation module calls in regard to networkconnectivity quality. Alternatively, the moderation module may beconfigured, as part of the app, to make various changes to accommodatethe network connectivity quality, or by way of predetermined applicationprogramming interfaces (APIs) implemented by the app/application.

According to aspects of the disclosed subject matter, the moderationmodule may be implemented as a computer service external to the app. Inthis configuration, the app would typically register with theintervention module and provide a callback function or by APIs (asdiscussed above) by which the moderation module can moderate the networkactivity of the app. Indeed, the moderation module may be implemented aspart of an operating system, i.e., as an operating system service, or asa service or daemon implemented by a third party external to the app.According to aspects of the disclosed subject matter, when implementedas a module operating independent of an app, the moderation modulemaintains a communications queue for each app/application that utilizesthe service of the moderation module.

Turning now to FIG. 1, FIG. 1 is a pictorial diagram illustrating anexemplary network environment 100 suitable for implementing aspects ofthe disclosed subject matter. The network environment 100 includes acomputer user 101 communicating over a network 108 using a computingdevice 102. According to aspects of the disclosed subject matter,communication with the network may be made via a wired or wirelessconnection. According to additional aspects of the disclosed subjectmatter, an app executing on the computing device may communicate (by wayof network requests) with one or more other services and/or resourcesconnected to the network, such as network computers 110 and 112. Furtherstill, in order to moderate network activity of the computing device 102to correspond to the current network connectivity quality, the computingdevice includes or accesses the functionality of a moderation module anda network request monitor as will be described in greater detail below.As already suggested, the moderation module and the network requestmonitor may be implemented as part of an app, as a system service on thecomputing device including an operating system service or third-partyservice, or a combination of the above.

Turning to FIG. 2, FIG. 2 is a block diagram illustrating an exemplaryinter-operation of components configured to moderate networkcommunications activity of an app, according to network conditionsaccording to aspects of the disclosed subject matter. A moderationmodule 202 network request data as stored in a communications queue,such as communication queue 216, where the communication queue includesnetwork request tuples, such as network request tuple 215, that reflectthe communication quality of a network request from a correspondingapplication, such as application 218. As shown in FIG. 2, a networkrequest moderator 206 receives the communication queue to determine thecurrent network connectivity quality of the current networkcommunication channel of the corresponding application.

The network request tuples are used to determine a current networkquality 203 by way of a network evaluator 204 component/function of themoderation module 202. According to the network quality information 203,the network request moderator 206 communicates with the application 218,by way of one or more moderation instructions 205, to moderate thenetwork connectivity of the application according to the determinedcurrent network connectivity quality 203.

Based on the moderation instructions 205 issued to the application 218,at the point that the application needs to issue a network request overa network, the application issues a moderated network request 205 viathe I/O subsystem of the operating system which, in turn, iscommunicated over the network 108 along with other network requests,such as network request 207. In short, due to the instructions receivedfrom the moderation module 202, the application moderates its networkactivity according to the current network connectivity quality 203.

According to one embodiment of the disclosed subject matter, the networkrequest monitor 210 monitors elements of the computer system, such asthe I/O subsystem of the operating system, and receives network requestinformation, including all network requests 207 of the computing device.Of course, these network requests include any moderated network requestssuch as moderated network request 205 from application 218.Alternatively, the network request monitor 210 may be configured todetect/receive only those network requests that correspond to the app(in which case a filtering—as described below—may or may not benecessary.) In addition to network requests, the network request monitoralso receives network change data 213 corresponding to a change incommunication channel of the computing device to the network 108. By wayof example and not limitation, a network change may occur when a deviceswitches from communicating over a mobile data channel (such as 4G dataof a mobile device) to a WiFi or wired network. Because the differentnetwork channels may provide differing network qualities, a networkchange is in order.

The network request monitor 210 includes an application filter 214 thatfilters the network requests 207 according to a corresponding app orapplication, such as application 218. In the event that the networkrequest monitor is part of an app or application, the application filter214 produces a set of filtered network requests 209 corresponding onlyto that app/application. Alternatively, the application filter wouldfilter the network requests 207 according to app/application producingfiltered network requests 209 for each of the apps that subscribe to thenetwork request monitor service. A storage module 212 receives thefiltered network requests 209 and processes them in chronological order.Processing includes extracting communication information from eachnetwork request and generating a network request tuple 211 that includesinformation that is used to evaluate network connectivity quality. Eachnetwork request tuple corresponds to a single network request and isstored in the communication queue corresponding to the app/applicationthat issues the network request, potentially overwriting an oldernetwork request tuple already stored in the communication queue 216.

As can be seen, the overall flow of information is a continuous cycle ofevaluating network connectivity quality according to a communicationqueue, moderating network request activity of the application accordingto the network connectivity quality, capturing network requests of theapp and updating the communication queue with the latest information(network request tuples) such that the current network communicationquality is determinable.

Turning to FIG. 3, FIG. 3 is a flow diagram illustrating an exemplaryroutine 300 for monitoring current network conditions in accordance withaspects of the disclosed subject matter. For illustration purposes,routine 300 is described in regard to processing data for a singleapp/application. However, it should be appreciated that thefunctionality represented in routine 300 is generally applicable tothose situations in which a network request monitor is providingservices for a plurality of apps and/or applications. Beginning at block302, a communication queue, such as communication queue 216, ismaintained for a corresponding application, such as application 218.

At block 304, network request data, such as network requests 207 of FIG.2, is received. At block 306, if necessary, the network requests of thenetwork request data are ordered chronologically. According to variousembodiments, the network requests are ordered chronologically in orderto ensure that the network communication quality assessment accuratelyreflects current conditions. At block 308, an iteration is begun toiterate through each of the network requests. As part of this iteration,at block 310 the network request is filtered according toapp/application, such that the network request is not discarded for thisapp if it is part of the app's network communications. At block 312, thenext network request is selected and the routine 300 returns to block308. Alternatively, if there are no more network requests to process,the routine 300 proceeds to block 314.

At block 314, a second iteration is begun with regard to the filterednetwork requests 209. As part of the iteration, at block 316 thecurrently iterated filtered network request is processed to generate anetwork request tuple 211. At block 318, the generated network requesttuple is stored in the communication queue, either in an open space oroverwriting the oldest network request tuple in the queue. Thereafter,at block 320, the next filtered network request is selected and theroutine 300 returns to block 312. Alternative, if there are no morefiltered network requests to process, the routine 300 returns to block304 to obtain new network requests and continue the monitoring processdescribed above.

FIG. 4 is a flow diagram illustrating an exemplary routine 400 formoderating network communications according to current networkcommunication quality, as discussed above. Beginning at block 402,network request data, often in the form of network request tuples,corresponding recent network requests of an app/application, such asapplication 218, are maintained a communication queue 216 for thecorresponding application. At block 404, the network request tuplescorresponding to the application are obtained from the communicationqueue. At block 406, the current network quality 203 is determined inregard to the current network conditions for the application. Accordingto aspects of the disclose subject matter, this determination is madeaccording to the obtained network request tuples in the communicationqueue 216. This determination may be made according to heuristicsfactoring in the number of communication failures, the averagethroughput of data for the communications, the number of retries(typically expressed in packets) that must be made to complete acommunication, and the like. At block 408, moderation instructions areissued (via communications with the corresponding application 218) tomoderate network request activity/functionality of the correspondingapplication 218 according to the determined network connectivityquality. As will be appreciated, the moderation instruction provides aninstruction to the application to modify the network activityfunctionality from a first level to a second level, assuming that thereis a change to the current network activity functionality of theapplication. Of course, the modification to the functionality may be anincrease or decrease to the network activity functionality. Thereafter,routine 400 terminates.

FIG. 5 is a flow diagram illustrating an exemplary routine 500 forresetting a communication queue upon detection of a network change inthe network channel by which the computing device communicates withexternal services, resources and devices on a network. Beginning atblock 502, a network change notice 213 is received. At block 504, thecommunication queue 216 is reset. Resetting the communication queuecomprises deleting the communication tuples of the queue (or resettingvalues such that the communication queue does not register as having anycommunication tuples.) Thereafter, the routine 500 terminates.

FIG. 6 is a flow diagram illustrating an exemplary routine 600 asimplemented by an application configured to moderation networkcommunication requests according to network quality. Beginning at block602, the application (such as application 128) receives one or morenetwork moderation instructions, such as moderation instructions 205,that indicate a current level of functionality as determined by thecurrent network quality of the application/computing device. At block604, the application sets internal functionality according to thecurrent network quality as determined by the received moderationinstructions. At block 606, the application then operates according tothe newly set functionality with regard to network requests. Thereafter,routine 600 terminates.

Regarding routines 300-600 described above, as well as other processesdescribe herein (such as the process described in regard to FIG. 2),while these routines/processes are expressed in regard to discretesteps, these steps should be viewed as being logical in nature and mayor may not correspond to any specific actual and/or discrete steps of agiven implementation. Also, the order in which these steps are presentedin the various routines and processes, unless otherwise indicated,should not be construed as the only order in which the steps may becarried out. Moreover, in some instances, some of these steps may beomitted. Those skilled in the art will recognize that the logicalpresentation of steps is sufficiently instructive to carry out aspectsof the claimed subject matter irrespective of any particular developmentlanguage in which the logical instructions/steps are encoded.

Of course, while these routines include various novel features of thedisclosed subject matter, other steps (not listed) may also be carriedout in the execution of the subject matter set forth in these routines.Those skilled in the art will appreciate that the logical steps of theseroutines may be combined together or be comprised of multiple steps.Steps of the above-described routines may be carried out in parallel orin series. Often, but not exclusively, the functionality of the variousroutines is embodied in software (e.g., applications, system services,libraries, and the like) that is executed on one or more processors ofcomputing devices, such as the computing device described in regard FIG.6 below. Additionally, in various embodiments all or some of the variousroutines may also be embodied in executable hardware modules including,but not limited to, system on chips (SoC's), codecs, specially designedprocessors and or logic circuits, and the like on a computer system.

As suggested above, these routines/processes are typically embodiedwithin executable code modules comprising routines, functions, loopingstructures, selectors such as if-then and if-then-else statements,assignments, arithmetic computations, and the like. However, assuggested above, the exact implementation in executable statement ofeach of the routines is based on various implementation configurationsand decisions, including programming languages, compilers, targetprocessors, operating environments, and the linking or bindingoperation. Those skilled in the art will readily appreciate that thelogical steps identified in these routines may be implemented in anynumber of ways and, thus, the logical descriptions set forth above aresufficiently enabling to achieve similar results.

While many novel aspects of the disclosed subject matter are expressedin routines embodied within applications (also referred to as computerprograms), apps (small, generally single or narrow purposedapplications), and/or methods, these aspects may also be embodied ascomputer-executable instructions stored by computer-readable media, alsoreferred to as computer-readable storage media, which are articles ofmanufacture. As those skilled in the art will recognize,computer-readable media can host, store and/or reproducecomputer-executable instructions and data for later retrieval and/orexecution. When the computer-executable instructions that are hosted orstored on the computer-readable storage devices are executed by aprocessor of a computing device, the execution thereof causes,configures and/or adapts the executing computing device to carry outvarious steps, methods and/or functionality, including those steps,methods, and routines described above in regard to the variousillustrated routines. Examples of computer-readable media include, butare not limited to: optical storage media such as Blu-ray discs, digitalvideo discs (DVDs), compact discs (CDs), optical disc cartridges, andthe like; magnetic storage media including hard disk drives, floppydisks, magnetic tape, and the like; memory storage devices such asrandom access memory (RAM), read-only memory (ROM), memory cards, thumbdrives, and the like; cloud storage (i.e., an online storage service);and the like. While computer-readable media may reproduce and/or causeto deliver the computer-executable instructions and data to a computingdevice for execution by one or more processor via various transmissionmeans and mediums including carrier waves and/or propagated signals, forpurposes of this disclosure computer readable media expressly excludescarrier waves and/or propagated signals.

Turning to FIG. 7, FIG. 7 is a block diagram illustrating an exemplarycomputer readable medium encoded with instructions to configure/operatenetwork communication quality according to aspects of the disclosedsubject matter. More particularly, the implementation 700 comprises acomputer-readable medium 708 (e.g., a CD-R, DVD-R or a platter of a harddisk drive), on which is encoded computer-readable data 606. Thiscomputer-readable data 706 in turn comprises a set of computerinstructions 704 configured to operate according to one or more of theprinciples set forth herein. In one such embodiment 702, theprocessor-executable instructions 704 may be configured to perform amethod, such as at least some of the exemplary methods 300 to 600 ofFIGS. 3 through 6 respectively, for example. In another such embodiment,the processor-executable instructions 704 may be configured to implementa system, such as at least some of the exemplary computing systems 800or 900 of FIGS. 8 and 9, as described below. Many such computer-readablemedia may be devised by those of ordinary skill in the art that areconfigured to operate in accordance with the techniques presentedherein.

Turning now to FIG. 8, FIG. 8 is block diagram illustrating an exemplarycomputing device 800 suitably configured to moderate networkcommunications of an app or application according to current networkconnectivity quality in accordance with aspects of the disclosed subjectmatter. The exemplary computing device 800 includes one or moreprocessors (or processing units), such as processor 802, and a memory804. The processor 802 and memory 804, as well as other components, areinterconnected by way of a system bus 810. The memory 804 typically (butnot always) comprises both volatile memory 806 and non-volatile memory808. Volatile memory 806 retains or stores information so long as thememory is supplied with power. In contrast, non-volatile memory 808 iscapable of storing (or persisting) information even when a power supplyis not available. Generally speaking, RAM and CPU cache memory areexamples of volatile memory 806 whereas ROM, solid-state memory devices,memory storage devices, and/or memory cards are examples of non-volatilememory 808.

The processor 802 executes instructions retrieved from the memory 804(and/or from computer-readable media, such as computer-readable media700 of FIG. 7) in carrying out various functions of a search engineconfigured to diversity search results as described above. The processor802 may be comprised of any of a number of available processors such assingle-processor, multi-processor, single-core units, and multi-coreunits.

Further still, the illustrated computing device 800 includes a networkcommunication component 812 for interconnecting this computing devicewith other devices and/or services over a computer network 108,including other computing devices, such as network computing devices 110and 112 of FIG. 1. The network communication component 812, sometimesreferred to as a network interface card or NIC, communicates over anetwork (such as network 108) using one or more communication protocolsvia a physical/tangible (e.g., wired, optical, etc.) connection, awireless connection, or both. As will be readily appreciated by thoseskilled in the art, a network communication component, such as networkcommunication component 812, is typically comprised of hardware and/orfirmware components (and may also include or comprise executablesoftware components) that transmit and receive digital and/or analogsignals over a transmission medium (i.e., the network.)

The computing device 800 further includes an operating system 814 thatincludes an I/O subsystem 208. As will be appreciated, an I/O subsystem208 comprises a set of hardware, software, and/or firmware componentsthat enable or facilitate inter-communication between a user of thecomputing device 800 and the processing system of the computing device800 as well as between the computing device and external services,resources, and/or computers over a network 108.

The computing device 800 also includes a communication moderator 820.The communication moderator includes all of the functionality formoderating network requests commensurate with current networkcommunication quality. Indeed, the communication moderator 820 includesmoderation module 202 that includes, as sub-components, a networkevaluator 204 and network request moderator 206 as described above inregard to FIG. 2. Also included in the communication moderator 820 is anetwork request monitor 210. As described above, the network requestmonitor 210 includes a storage module 212 and an application filter 214as described above in regard to FIG. 2.

The computing device 800 still further includes at least one executableapplication (or app) that is suitably configured to provide thefunctionality to the communication moderator 820 to moderate networkrequest activity according to network connectivity quality. Further, adata store 824 stores the communication queue for one or more appsand/or applications, including application 822.

Turning now to FIG. 9, FIG. 9 is block diagram illustrating analternative exemplary computing device 900 suitably configured tomoderate network communications of an app or application according tocurrent network connectivity quality in accordance with aspects of thedisclosed subject matter. In similarity to computing device 800,exemplary computing device 900 includes one or more processors (orprocessing units), such as processor 902, and a memory 904. Theprocessor 902 and memory 904, as well as other components, areinterconnected by way of a system bus 910. The memory 904 typically (butnot always) comprises both volatile memory 906 and non-volatile memory908.

The processor 902 executes instructions retrieved from the memory 904(and/or from computer-readable media, such as computer-readable media700 of FIG. 7) in carrying out various functions of a search engineconfigured to diversity search results as described above. The processor902 may be comprised of any of a number of available processors such assingle-processor, multi-processor, single-core units, and multi-coreunits.

Further still, the illustrated computing device 900 includes a networkcommunication component 912 for interconnecting this computing devicewith other devices and/or services over a computer network 108,including other computing devices, such as network computing devices 110and 112 of FIG. 1.

The computing device 900 further includes an operating system 914 thatincludes an I/O subsystem 208. As will be appreciated, an I/O subsystem208 comprises a set of hardware, software, and/or firmware componentsthat enable or facilitate inter-communication between a user of thecomputing device 900 and the processing system of the computing device800 as well as between the computing device and external services,resources, and/or computers over a network 108.

In addition to the I/O subsystem 208 and according to alternativeaspects of the disclosed subject matter, the operating system 914 alsoincludes a communication moderator 920. As described above, thecommunication moderator 820 includes/provides all of the functionalityfor moderating network requests commensurate with current networkcommunication quality as discussed above, but in this alternativeembodiment the communication moderator is hosted as part of theoperating system 914. Moreover, while apps and/or applications mayadvantageously benefit from the communication moderation 920 (or 820),so too may the operating system be advantaged through moderation ofcommunication activity based on network quality. Further still, whilenot shown, the communication moderation service may also be implementedas a third-party service external to the exemplary computing devices.

As with the communication moderator 820 of FIG. 8, the communicationmoderator 920 includes a moderation module 202 that includes, assub-components, a network evaluator 204 and network request moderator206 as described above in regard to FIG. 2. Also included in thecommunication moderator 920 is a network request monitor 210. Asdescribed above in regard to FIG. 2, the network request monitor 210includes a storage module 212 and an application filter 214.

Also shown as included in the exemplary, alternative computing device900 is at least one executable application 922 (or app) that is suitablyconfigured to provide the functionality to the communication moderator820 to moderate network request activity according to networkconnectivity quality. Further, a data store 924 stores the communicationqueue for one or more apps and/or applications, including application922

Regarding the various components of the exemplary user computing devices800 and 900, those skilled in the art will appreciate that thesecomponents may be implemented as executable software modules stored inthe memory of the computing device, as hardware modules and/orcomponents (including SoCs—system on a chip), or a combination of thetwo. Indeed, as indicated above, components such as the communicationmonitor 820 or 920 may be implemented according to various executableembodiments including executable software modules that carry out one ormore logical elements of the processes described in this document, or asa hardware and/or firmware components that include executable logic tocarry out the one or more logical elements of the processes described inthis document. Examples of these executable hardware components include,by way of illustration and not limitation, ROM (read-only memory)devices, programmable logic array (PLA) devices, PROM (programmableread-only memory) devices, EPROM (erasable PROM) devices, and the like,each of which may be encoded with instructions and/or logic which, inexecution, carry out the functions described herein.

Moreover, in certain embodiments each of the various components of theuser computing devices 800 and 900 may be implemented as an independent,cooperative process or device, operating in conjunction with or on oneor more computer systems and or computing devices. It should be furtherappreciated, of course, that the various components described aboveshould be viewed as logical components for carrying out the variousdescribed functions. As those skilled in the art will readilyappreciate, logical components and/or subsystems may or may notcorrespond directly, in a one-to-one manner, to actual, discretecomponents. In an actual embodiment, the various components of eachcomputing device may be combined together or distributed across multipleactual components and/or implemented as cooperative processes on acomputer network, such as network 108 of FIG. 1.

While various novel aspects of the disclosed subject matter have beendescribed, it should be appreciated that these aspects are exemplary andshould not be construed as limiting. Variations and alterations to thevarious aspects may be made without departing from the scope of thedisclosed subject matter.

What is claimed:
 1. A computer-implemented method for moderating thenetwork connectivity of an application with regard to networkconnectivity quality, the method comprising: maintaining a communicationqueue of most recent network request data of a moderated application ona computing device; determining a current network connectivity qualityfor the moderated application according to the network request data ofthe moderated application maintained in the communication queue; andissuing a moderation instruction to the moderated applicationcorresponding to the determined current network connectivity quality forthe moderated application; wherein the moderation instructioncorresponds to a directive to the moderated application to alter networkrequest activity from a first level of functionality to a second levelof functionality.
 2. The computer-implemented method of claim 1 furthercomprising: repeatedly receiving network request data of recent networkrequests of the moderated application; updating the communication queueaccording to the received network request data; determining an updatedcurrent network connectivity quality according to the most recentnetwork request data for the moderated application in the communicationqueue; and issuing a subsequent moderation instruction to the moderatedapplication corresponding to the determined updated current networkconnectivity quality for the application if the updated current networkconnectivity quality has changed from a previous current networkconnectivity quality.
 3. The computer-implemented method of claim 2,wherein the most recent network request data in the communication queuecomprises network request tuples, each network request tuplecorresponding to a recent network request of the moderated application.4. The computer-implemented method of claim 3, wherein repeatedlyreceiving network request data of recent network requests of themoderated application comprises: repeatedly receiving network requestdata, the network request data comprising a plurality of networkrequests carried out on the computing device by any one or more of aplurality of applications executing on the computing device; filteringthe network request data according to whether or not a network requestof the network request corresponded to the moderated application,wherein filtering a network request removes those network requests thatare not originated from the moderated application from use by the methodon behalf of the moderated application; and for each network request ofthe filtered network request data: generating a network request tupleaccording to the network request; and storing the network request tuplein the most recent network request data corresponding to the moderatedapplication in the communication queue.
 5. The computer-implementedmethod of claim 3, wherein determining the updated current networkconnectivity quality for the moderated application comprises determiningthe updated current network connectivity quality for the moderatedapplication according to one or more heuristics or a predeterminedthreshold according to the network request data in the communicationqueue.
 6. The computer-implemented method of claim 3, wherein the mostrecent network request data in the communication queue comprises networkrequest tuples, each network request tuple corresponding to a recentnetwork request of the moderated application.
 7. Thecomputer-implemented method of claim 1 further comprising: receiving anetwork change notice, the network change notice corresponding to achange in a network channel by which the computing device communicates;and resetting the communication queue for the moderated application. 8.The computer-implemented method of claim 1, wherein issuing themoderation instruction to the moderated application comprises issuingthe moderation instruction to the moderated application via anapplication programming interface (API) implemented by the moderatedapplication.
 9. The computer-implemented method of claim 1, whereinissuing the moderation instruction to the moderated applicationcomprises issuing the moderation instruction to the moderatedapplication via a call-back function of the moderated application. 10.The computer-implemented method of claim 1, wherein the moderationinstruction identifies the determined current network connectivityquality for the moderated application as one of a high or a low quality.11. The computer-implemented method of claim 1, wherein the moderationinstruction identifies the determined current network connectivityquality for the moderated application as one of a high, a medium, or alow quality.
 12. The computer-implemented method of claim 1, wherein themoderation instruction identifies the determined current networkconnectivity quality for the moderated application as a percentage valuebetween a highest connectivity quality and a lowest connectivityquality.
 13. A computer-readable medium bearing computer-executableinstructions which, when executed on a computing device comprising atleast a processor executing instructions retrieved from the medium,carry out a method for moderating the network connectivity of amoderated application with regard to network connectivity quality, themethod comprising: maintaining a communication queue of most recentnetwork request data of a moderated application on a computing device,wherein the most recent network request data in the communication queuecomprises network request tuples, each network request tuplecorresponding to a recent network request of the moderated application;determining a current network connectivity quality for the moderatedapplication according to the communication queue; and issuing amoderation instruction to the moderated application corresponding to thedetermined current network connectivity quality for the moderatedapplication; wherein the moderation instruction corresponds to adirective to the moderated application to alter network request activityfrom a first level of functionality to a second level of functionality.14. The computer-readable medium of claim 13, wherein the method furthercomprises: repeatedly receiving network request data of recent networkrequests of the moderated application; updating the communication queueaccording to the received network request data; determining an updatedcurrent network connectivity quality according to the most recentnetwork request data for the moderated application in the communicationqueue; and issuing a subsequent moderation instruction to the moderatedapplication corresponding to the determined updated current networkconnectivity quality for the application if the updated current networkconnectivity quality has changed from a previous current networkconnectivity quality.
 15. The computer-readable medium of claim 14,wherein repeatedly receiving network request data of recent networkrequests of the moderated application comprises: repeatedly receivingnetwork request data, the network request data comprising a plurality ofnetwork requests carried out on the computing device by any one or moreof a plurality of applications executing on the computing device;filtering the network request data according to whether or not a networkrequest of the network request corresponded to the moderatedapplication, wherein filtering a network request removes those networkrequests that are not originated from the moderated application from useby the method on behalf of the moderated application; and for eachnetwork request of the filtered network request data: generating anetwork request tuple according to the network request; and storing thenetwork request tuple in the most recent network request datacorresponding to the moderated application in the communication queue.16. The computer-readable medium of claim 14, wherein determining theupdated current network connectivity quality for the moderatedapplication comprises determining the updated current networkconnectivity quality for the moderated application according to one ormore heuristics or a predetermined threshold according to the networkrequest data in the communication queue.
 17. The computer-readablemedium of claim 14, wherein the most recent network request data in thecommunication queue comprises network request tuples, each networkrequest tuple corresponding to a recent network request of the moderatedapplication.
 18. The computer-readable medium of claim 13, wherein themethod further comprises: receiving a network change notice, the networkchange notice corresponding to a change in a network channel by whichthe computing device communicates; and resetting the communication queuefor the moderated application.
 19. A computing device configured tomoderate the network connectivity of a moderated application with regardto network connectivity quality, the computing device comprising aprocessor and a memory, wherein the processor executes instructionsstored in the memory and causes the computing device to: maintain acommunication queue of most recent network request data of the moderatedapplication; determine a current network connectivity quality for themoderated application according to the most recent network request dataof the moderated application in the communication queue; and issue amoderation instruction to the moderated application corresponding to thedetermined current network connectivity quality for the moderatedapplication; wherein the moderation instruction corresponds to adirective to the moderated application to alter its network requestactivity from a first level of functionality to a second level offunctionality.
 20. The computing device of claim 19, wherein maintainingthe communication queue of most recent network request data of themoderated application, determining the current network connectivityquality for the moderated application, and issuing the moderationinstruction to the moderated application are implemented on thecomputing device as part of the operating system of the computingdevice.